home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume89 / intuitin / msizer.1 < prev    next >
Text File  |  1989-11-13  |  32KB  |  962 lines

  1. Path: xanth!mcnc!rutgers!usc!brutus.cs.uiuc.edu!wuarchive!texbell!texsun!newstop!sun!swap!page
  2. From: page%swap@Sun.COM (Bob Page)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v89i197:  msizer - size a window from any corner (like sunview)
  5. Message-ID: <127765@sun.Eng.Sun.COM>
  6. Date: 13 Nov 89 01:24:28 GMT
  7. Sender: news@sun.Eng.Sun.COM
  8. Lines: 951
  9. Approved: page@sun.com
  10.  
  11. Submitted-by: giampal@auvm.bitnet
  12. Posting-number: Volume 89, Issue 197
  13. Archive-name: intuition/msizer.1
  14.  
  15. Msizer allows you to resize a window from any corner when holding down
  16. the left mouse button and the left amiga key.
  17.  
  18. [uuencoded executable included.  This would make a good Commodities
  19. Exchange demo.  ..bob]
  20.  
  21. # This is a shell archive.
  22. # Remove anything above and including the cut line.
  23. # Then run the rest of the file through 'sh'.
  24. # Unpacked files will be owned by you and have default permissions.
  25. #----cut here-----cut here-----cut here-----cut here----#
  26. #!/bin/sh
  27. # shar: SHell ARchive
  28. # Run the following text through 'sh' to create:
  29. #    MSizer.c
  30. #    MSizer.doc
  31. #    MSizer.uu
  32. # This is archive 1 of a 1-part kit.
  33. # This archive created: Sun Nov 12 17:19:14 1989
  34. echo "extracting MSizer.c"
  35. sed 's/^X//' << \SHAR_EOF > MSizer.c
  36. X/*
  37. X    Keeping to tradition, the Khaled Mardam-Bey philosophy, this program
  38. X    is completely undocumented so as to give you prime experience in
  39. X    learning how to debug source code.
  40. X
  41. X      The program also contains many redundant bits and pieces so as to
  42. X    make your learning experience that much more profoundly educational
  43. X    and exceptional.
  44. X
  45. X    This is how NOT to write a program.
  46. X
  47. X    Got it ? Okay, great, now YOU can start teaching others by coding in
  48. X    exactly the same way.
  49. X
  50. X    There's something very deep in that last sentence, can't quite
  51. X    pinpoint it though, hmmm...
  52. X
  53. X    compile with  cc Msizer.c
  54. X                  ln Msizer.o -lc
  55. X
  56. X    Warning - It won't bite unless you try to compile it.
  57. X              Linking is okay though... <grin>
  58. X
  59. X   This source is totally PD.
  60. X
  61. X   written by Khaled Mardam-Bey, 14th October 1989.
  62. X*/
  63. X
  64. X#include <exec/lists.h>
  65. X#include <exec/interrupts.h>
  66. X#include <exec/ports.h>
  67. X#include <exec/libraries.h>
  68. X#include <exec/io.h>
  69. X#include <exec/execbase.h>
  70. X#include <exec/types.h>
  71. X#include <exec/devices.h>
  72. X#include <exec/memory.h>
  73. X#include <exec/exec.h>
  74. X#include <exec/ports.h>
  75. X#include <exec/tasks.h>
  76. X#include <libraries/dos.h>
  77. X#include <libraries/dosextens.h>
  78. X#include <devices/timer.h>
  79. X#include <devices/trackdisk.h>
  80. X#include <devices/input.h>
  81. X#include <devices/inputevent.h>
  82. X#include <intuition/intuition.h>
  83. X#include <intuition/intuitionbase.h>
  84. X#include <ctype.h>
  85. X#include <stdio.h>
  86. X#include <functions.h>
  87. X#include <graphics/gfxbase.h>
  88. X
  89. X  /* Key Definitions */
  90. X#define QKEY         0x45
  91. X#define CONTROL      0x63
  92. X#define THRESHX      16
  93. X#define THRESHY      8
  94. X#define MINX         40
  95. X#define MINY         24
  96. X
  97. X  /* input events */
  98. X#define QUIT         0x1
  99. X#define FINISHUP     0x2
  100. X#define MOVEIT       0x4
  101. X#define DOWINDOW     0x8
  102. X
  103. X#define DELAY    1000000L
  104. X
  105. Xchar PortName[] = "PePeTe";
  106. Xchar WrittenBy[] = "Khaled Mardam-Bey 1989";
  107. X
  108. XSHORT i,j,k,l;
  109. XSHORT nomore = 0, NoGo = 0;
  110. XSHORT corner = 0;
  111. XSHORT dx,dy,ff,xx,yy,oo;
  112. XSHORT DoIT = 0, there = 0;
  113. XSHORT LastX,LastY;
  114. XSHORT x,y,ox,oy,fx,fy;
  115. XSHORT event;
  116. XSHORT lastcode = 0;
  117. Xlong  sec = 0,micro = 0;
  118. XSHORT rbuttonisdown = 0, lbuttonisdown = 0;
  119. XSHORT ww, wh, te, le, sw, sh;
  120. X
  121. Xstruct Library *OpenLibrary();
  122. Xstruct ViewPort *ViewPortAddress();
  123. X
  124. Xstruct MsgPort       *inputPort = NULL;
  125. Xstruct IOStdReq      *inputReq = NULL;
  126. Xstruct MsgPort       *TimerPort = NULL;
  127. Xstruct Screen        *s, *Screen = NULL;
  128. Xstruct IntuitionBase *IntuitionBase = NULL;
  129. Xstruct GfxBase       *GfxBase = NULL;
  130. Xstruct Window        *window;
  131. Xstruct RastPort      *rp;
  132. Xstruct Layer_Info    *li;
  133. Xstruct LayersBase    *LayersBase = NULL;
  134. X
  135. Xvoid move(x,y) SHORT x,y; { Move(rp, (long) x, (long) y); }
  136. Xvoid draw(x,y) SHORT x,y; { Draw(rp, (long) x, (long) y); }
  137. Xvoid plot(x,y) SHORT x,y; { WritePixel(rp, (long) x, (long) y); }
  138. X
  139. Xstruct timerequest Timer_Req;
  140. Xlong   TimerSig,tdevice = 1;
  141. X
  142. Xstruct InputEvent phoney;
  143. Xstruct HotInfo
  144. X  {
  145. X  struct Task *hotTask;
  146. X  long  hotSig;
  147. X  } hotStuff;
  148. X
  149. Xlong signum = -1;
  150. X
  151. Xstruct Interrupt handlerStuff;
  152. Xstruct defPort
  153. X{
  154. X  struct MsgPort mp;
  155. X};
  156. X
  157. Xstruct defPort *defPortPtr;
  158. Xchar defPortName[] = "WiNnYpO";
  159. XSHORT updating = 0;
  160. X
  161. Xvoid HandlerInterface()
  162. X{
  163. X#asm
  164. X  movem.l a4,-(sp)
  165. X  jsr _geta4#
  166. X  movem.l   A0/A1,-(sp)
  167. X  jsr       _myhandler
  168. X  addq.l    #8,A7
  169. X  movem.l (sp)+,a4
  170. X#endasm
  171. X}
  172. X
  173. Xstruct InputEvent *myhandler(ev1, hotStuff)
  174. Xstruct InputEvent *ev1;
  175. Xstruct HotInfo *hotStuff;
  176. X{
  177. X  struct InputEvent *ev, *last;
  178. X  SHORT removeit;
  179. X  SHORT evcode,evqual;
  180. X
  181. X  event = 0;
  182. X  for (ev=ev1,last = NULL; ev; ev=ev->ie_NextEvent)
  183. X  {
  184. X    evcode = ev->ie_Code;
  185. X    evqual = ev->ie_Qualifier;
  186. X    removeit = 0;
  187. X
  188. X    if ((ev->ie_Class != IECLASS_TIMER))
  189. X    {
  190. X      if (ev->ie_Class == IECLASS_RAWKEY)
  191. X      {
  192. X        if ((evcode >= 0x80) && (evcode == (lastcode | 0x80))) {
  193. X          DoIT = 0;
  194. X          event |= FINISHUP;
  195. X          removeit = 1;
  196. X          lastcode = 0; }
  197. X        else {
  198. X          lastcode = 0;
  199. X          removeit = 0;
  200. X        }
  201. X
  202. X       if (evcode == CONTROL)
  203. X       {
  204. X         lastcode = evcode;
  205. X         removeit = 1;
  206. X         DoIT = 1;
  207. X       }
  208. X       else
  209. X       if (evcode == QKEY) {
  210. X         if (DoIT) DoIT = 2;
  211. X         lastcode = evcode;
  212. X         removeit = 1;
  213. X       }
  214. X       else DoIT = 0;
  215. X      }
  216. X    }
  217. X
  218. X    if (ev->ie_Class == IECLASS_RAWMOUSE)
  219. X    {
  220. X      if (evcode == (IECODE_LBUTTON | 0x80)) {
  221. X        lbuttonisdown = 0;
  222. X        if (DoIT) event |= DOWINDOW;
  223. X        else event |= FINISHUP;
  224. X      }
  225. X      else {
  226. X        if (evcode == IECODE_LBUTTON) {
  227. X          if (DoIT == 2) event |= QUIT;
  228. X          if ((lbuttonisdown == 0) && (DoIT == 1)) removeit = 1;
  229. X          lbuttonisdown = 1;
  230. X        }
  231. X
  232. X        if ((lbuttonisdown) && (DoIT)) {
  233. X          event |= MOVEIT;
  234. X        }
  235. X      }
  236. X    }
  237. X
  238. X    if (removeit)
  239. X      if (last == NULL)
  240. X        ev1 = ev->ie_NextEvent;
  241. X      else
  242. X        last->ie_NextEvent = ev->ie_NextEvent;
  243. X    else
  244. X      last = ev;
  245. X  }
  246. X
  247. X  if (event)
  248. X    Signal(hotStuff->hotTask,hotStuff->hotSig);
  249. X  return(ev1);
  250. X}
  251. X
  252. Xmain()
  253. X{
  254. X  struct IntuiMessage *Msg;
  255. X  long                class;
  256. X
  257. X  IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library",0L);
  258. X  if (!IntuitionBase) exit(0L);
  259. X
  260. X  GfxBase = (struct GfxBase *)OpenLibrary("graphics.library",0L);
  261. X  if (!GfxBase) exit(0L);
  262. X
  263. X  LayersBase = (struct LayersBase *) OpenLibrary("layers.library",0L);
  264. X  if (!LayersBase) exit(0L);
  265. X
  266. X  defPortPtr = (struct defPort *) FindPort(defPortName);
  267. X  if (defPortPtr == NULL)
  268. X  {
  269. X    if ((defPortPtr = (struct defPort *) AllocMem((long)sizeof(struct defPort),MEMF_PUBLIC | MEMF_CLEAR)) == NULL)
  270. X      exit(10);
  271. X  }
  272. X  else
  273. X    updating = 1;
  274. X
  275. X  if (updating)
  276. X    Uninstall();
  277. X
  278. X  defPortPtr->mp.mp_Node.ln_Pri = 0;
  279. X  defPortPtr->mp.mp_Node.ln_Type = NT_MSGPORT;
  280. X  NewList(&(defPortPtr->mp.mp_MsgList));
  281. X  defPortPtr->mp.mp_Node.ln_Name = (char *) &(defPortName);
  282. X
  283. X  AddPort(defPortPtr);
  284. X
  285. X  if((signum = AllocSignal((long)-1)) == -1)
  286. X    Uninstall();
  287. X
  288. X  hotStuff.hotSig = 1 << signum;
  289. X  hotStuff.hotTask = FindTask(NULL);
  290. X
  291. X  if(!(inputPort = CreatePort(PortName,0)))
  292. X    Uninstall();
  293. X  if(!(inputReq = CreateStdIO(inputPort)))
  294. X    Uninstall();
  295. X
  296. X  handlerStuff.is_Data = (APTR)&hotStuff;
  297. X  handlerStuff.is_Code = HandlerInterface;
  298. X  handlerStuff.is_Node.ln_Pri = 55;
  299. X  handlerStuff.is_Node.ln_Name = "PoOpHaNy";
  300. X
  301. X  if(OpenDevice("input.device",0L,inputReq,0L) != 0)
  302. X    Uninstall();
  303. X
  304. X  inputReq->io_Command = IND_ADDHANDLER;
  305. X  inputReq->io_Data = (APTR)&handlerStuff;
  306. X
  307. X  DoIO(inputReq);
  308. X
  309. X  if ((TimerPort = CreatePort("TimPodle", 0L)) == NULL)
  310. X    Uninstall();
  311. X
  312. X  if ((tdevice = OpenDevice(TIMERNAME, UNIT_VBLANK, &Timer_Req, 0L)) != 0)
  313. X    Uninstall();
  314. X  Timer_Req.tr_node.io_Message.mn_ReplyPort = TimerPort;
  315. X  Timer_Req.tr_node.io_Command = TR_ADDREQUEST;
  316. X  Timer_Req.tr_node.io_Flags = 0;
  317. X  Timer_Req.tr_node.io_Error = 0;
  318. X
  319. X  TimerSig = (1L << TimerPort->mp_SigBit);
  320. X
  321. X  QueTimer();
  322. X
  323. X  (void)SetTaskPri(FindTask(NULL), 20L);
  324. X
  325. X  for (;;)
  326. X  {
  327. X    Wait(hotStuff.hotSig | TimerSig);
  328. X
  329. X    if (Msg = (struct IntuiMessage *)GetMsg(TimerPort))
  330. X      if (Msg) QueTimer();
  331. X
  332. X    if (breakcheck()) Uninstall();
  333. X    breakreset();
  334. X
  335. X    if (event & QUIT) Uninstall();
  336. X
  337. X    if (event & FINISHUP) {
  338. X      FiniUpi();
  339. X      corner = 0;
  340. X      nomore = 0;
  341. X    }
  342. X
  343. X    if (event & DOWINDOW) MoveThatWindow();
  344. X
  345. X    if (event & MOVEIT) {
  346. X      if (nomore == 0) CheckPP();
  347. X      else if (corner != 0) ElBorders();
  348. X    }
  349. X  event = 0;
  350. X  }
  351. X}
  352. X
  353. XFiniUpi()
  354. X{
  355. X  if (there) {
  356. X    xx = LastX + dx; yy = LastY + dy;
  357. X    DoEm();
  358. X    UnlockLayers(li);
  359. X    there = 0;
  360. X  }
  361. X}
  362. X
  363. XQueTimer()
  364. X{
  365. X  Timer_Req.tr_time.tv_secs = 0;
  366. X  Timer_Req.tr_time.tv_micro = DELAY;
  367. X  SendIO(&Timer_Req.tr_node);
  368. X}
  369. X
  370. XElBorders()
  371. X{
  372. X  if ((LastX != s->MouseX) || (LastY != s->MouseY)) {
  373. X    xx = LastX + dx;
  374. X    yy = LastY + dy;
  375. X    DoEm();
  376. X    xx = s->MouseX + dx;
  377. X    yy = s->MouseY + dy;
  378. X    DoEm();
  379. X  }
  380. X
  381. X  there = 1;
  382. X  LastX = s->MouseX;
  383. X  LastY = s->MouseY;
  384. X}
  385. X
  386. XDoEm()
  387. X{
  388. X  if (corner == 1) do1();
  389. X  else if (corner == 2) do2();
  390. X  else if (corner == 3) do3();
  391. X  else if (corner == 4) do4();
  392. X}
  393. X
  394. Xdo1()
  395. X{
  396. X  while (xx < 0) xx = xx + 1;
  397. X  while (yy < 0) yy = yy + 1;
  398. X
  399. X  while ((le+ww) > s->Width) ww = ww -1;
  400. X  while ((te+wh) > s->Height) wh = wh - 1;
  401. X
  402. X  if (xx > (le+ww-MINX)) xx = (le+ww-MINX);
  403. X  if (yy > (te+wh-MINY)) yy = (te+wh-MINY);
  404. X
  405. X  move( (SHORT) xx, (SHORT) yy);
  406. X  draw( (SHORT) (le+ww-1), (SHORT) yy);
  407. X  draw( (SHORT) (le+ww-1), (SHORT) (te+wh-1));
  408. X  draw( (SHORT) xx, (SHORT) (te+wh-1));
  409. X  draw( (SHORT) xx, (SHORT) yy);
  410. X}
  411. X
  412. Xdo2()
  413. X{
  414. X  while (xx > s->Width) xx = xx - 1;
  415. X  while (xx < 0) xx = xx + 1;
  416. X  while (yy < 0) yy = yy + 1;
  417. X  while (yy > s->Height) yy = yy - 1;
  418. X
  419. X  while ((te+wh) > s->Height) wh = wh - 1;
  420. X
  421. X  if (xx < (le+MINX)) xx = le+MINX;
  422. X  if (yy > (te+wh-MINY)) yy = (te+wh-MINY);
  423. X
  424. X  move( (SHORT) xx-1, (SHORT) yy);
  425. X  draw( (SHORT) le, (SHORT) yy);
  426. X  draw( (SHORT) le, (SHORT) (te+wh-1));
  427. X  draw( (SHORT) xx-1, (SHORT) (te+wh-1));
  428. X  draw( (SHORT) xx-1, (SHORT) yy);
  429. X}
  430. X
  431. Xdo3()
  432. X{
  433. X  while (xx < 0) xx = xx + 1;
  434. X  while (xx > s->Width) xx = xx - 1;
  435. X  while (yy < 0) yy = yy + 1;
  436. X  while (yy > s->Height) yy = yy - 1;
  437. X
  438. X  while ((le+ww) > s->Width) ww = ww -1;
  439. X
  440. X  if (xx > (le+ww-MINX)) xx = (le+ww-MINX);
  441. X  if (yy < (te+MINY)) yy = (te+MINY);
  442. X
  443. X  move( (SHORT) xx, (SHORT) yy-1);
  444. X  draw( (SHORT) (le+ww-1), (SHORT) yy-1);
  445. X  draw( (SHORT) (le+ww-1), (SHORT) te);
  446. X  draw( (SHORT) xx, (SHORT) te);
  447. X  draw( (SHORT) xx, (SHORT) yy-1);
  448. X}
  449. X
  450. Xdo4()
  451. X{
  452. X  while (xx < 0) xx = xx + 1;
  453. X  while (xx > s->Width) xx = xx - 1;
  454. X  while (yy < 0) yy = yy + 1;
  455. X  while (yy > s->Height) yy = yy - 1;
  456. X
  457. X  if (xx < (le+MINX)) xx = (le+MINX);
  458. X  if (yy < (te+MINY)) yy = (te+MINY);
  459. X
  460. X  move( (SHORT) xx-1, (SHORT) yy-1);
  461. X  draw( (SHORT) xx-1, (SHORT) te);
  462. X  draw( (SHORT) le, (SHORT) te);
  463. X  draw( (SHORT) le, (SHORT) yy-1);
  464. X  draw( (SHORT) xx-1, (SHORT) yy-1);
  465. X}
  466. X
  467. XCheckPP()
  468. X{
  469. X  window = IntuitionBase->ActiveWindow;
  470. X
  471. X  if (window != NULL) {
  472. X    le = window->LeftEdge;    te = window->TopEdge;
  473. X    ww = window->Width;       wh = window->Height;
  474. X
  475. X    s = window->WScreen;
  476. X    sw = s->Width;
  477. X    sh = s->Height;
  478. X
  479. X    rp=&(s->RastPort);
  480. X
  481. X    SetAPen(rp,1L);
  482. X    SetBPen(rp,2L);
  483. X    SetDrMd(rp, COMPLEMENT | JAM1);
  484. X
  485. X    LastX = ox = x = s->MouseX;
  486. X    LastY = oy = y = s->MouseY;
  487. X
  488. X    corner = 0;
  489. X
  490. X    if ((y >= te) && (y < (te + THRESHY)))  {                    /* top edge */
  491. X      if ((x >= le) && (x < (le + THRESHX)))                     /* left */
  492. X      { corner = 1;
  493. X        dx = le - x;
  494. X        dy = te - y;
  495. X      }
  496. X      else
  497. X      if ((x <= (le + ww)) && (x > (le + ww - THRESHX)))         /* right */
  498. X      { corner = 2;
  499. X        dx = (le+ww) - x;
  500. X        dy = te - y;
  501. X      }
  502. X    }
  503. X    else
  504. X    if ((y <= (te + wh)) && (y > (te + wh - THRESHY)))  {        /* bottom edge */
  505. X      if ((x >= le) && (x < (le + THRESHX)))                     /* left */
  506. X      { corner = 3;
  507. X        dx = le - x;
  508. X        dy = (te+wh) - y;
  509. X      }
  510. X      else
  511. X      if ((x <= (le + ww)) && (x > (le + ww - THRESHX)))         /* right */
  512. X      { corner = 4;
  513. X        dx = (le+ww) - x;
  514. X        dy = (te+wh) - y;
  515. X      }
  516. X    }
  517. X
  518. X    if (corner != 0) {
  519. X      LastX = x = s->MouseX;
  520. X      LastY = y = s->MouseY;
  521. X      li = &(s->LayerInfo);
  522. X      LockLayers(li);
  523. X      ox = xx = LastX + dx;
  524. X      oy = yy = LastY + dy;
  525. X      DoEm();
  526. X      nomore = 1;
  527. X      there = 1;
  528. X    }
  529. X    else nomore = 0;
  530. X  }
  531. X}
  532. X
  533. XMoveThatWindow()
  534. X{
  535. X  Forbid();
  536. X  Disable();
  537. X
  538. X  FiniUpi();
  539. X
  540. X  fx = xx;
  541. X  fy = yy;
  542. X
  543. X  xx = fx - ox; if (xx < 0) xx = xx * -1;
  544. X  yy = fy - oy; if (yy < 0) yy = yy * -1;
  545. X
  546. X  if (corner == 1) {
  547. X    if ((fx >= ox) && (fy >= oy)) {
  548. X      while (xx > (le+ww-MINX)) xx = xx - 1;
  549. X      while (yy > (te+wh-MINY)) yy = yy - 1;
  550. X      SizeWindow(window, (-1L * xx), (-1L * yy));
  551. X      MoveWindow(window, (1L * xx), (1L * yy));
  552. X    }
  553. X    else
  554. X    if ((fx <= ox) && (fy <= oy)) {
  555. X      while ((le-xx) < 0) xx = xx - 1;
  556. X      while ((te-yy) < 0) yy = yy - 1;
  557. X      MoveWindow(window, (-1L * xx), (-1L * yy));
  558. X      SizeWindow(window, (1L * xx), (1L * yy));
  559. X    }
  560. X    else
  561. X    if ((fx >= ox) && (fy <= oy)) {
  562. X      while (xx > (le+ww-MINX)) xx = xx - 1;
  563. X      while ((te-yy) < 0) yy = yy - 1;
  564. X      SizeWindow(window, (-1L * xx), 0L);
  565. X      MoveWindow(window, (1L * xx), (-1L * yy));
  566. X      SizeWindow(window, 0L, (1L * yy));
  567. X    }
  568. X    else
  569. X    if ((fx <= ox) && (fy >= oy)) {
  570. X      while (yy > (te+wh-MINY)) yy = yy - 1;
  571. X      while ((le-xx) < 0) xx = xx - 1;
  572. X      SizeWindow(window, 0L, (-1L * yy));
  573. X      MoveWindow(window, (-1L * xx), (1L * yy));
  574. X      SizeWindow(window, (1L * xx), 0L);
  575. X    }
  576. X  }
  577. X  else
  578. X  if (corner == 2) {
  579. X    if ((fx >= ox) && (fy >= oy)) {
  580. X      while (yy > (te+wh-MINY)) yy = yy - 1;
  581. X      while ((xx+le+ww) > s->Width) xx = xx - 1;
  582. X      SizeWindow(window, (1L * xx), (-1L * yy));
  583. X      MoveWindow(window, 0L, (1L * yy));
  584. X    }
  585. X    else
  586. X    if ((fx <= ox) && (fy <= oy)) {
  587. X      while ((te-yy) < 0) yy = yy - 1;
  588. X      MoveWindow(window, 0L , (-1L * yy));
  589. X      SizeWindow(window, (-1L * xx), (1L * yy));
  590. X    }
  591. X    else
  592. X    if ((fx >= ox) && (fy <= oy)) {
  593. X      while ((le+ww+xx) > s->Width) xx = xx - 1;
  594. X      while ((te-yy) < 0) yy = yy - 1;
  595. X      MoveWindow(window, 0L, (-1L * yy));
  596. X      SizeWindow(window, (1L * xx), (1L * yy));
  597. X    }
  598. X    else
  599. X    if ((fx <= ox) && (fy >= oy)) {
  600. X      while (yy > (te+wh-MINY)) yy = yy - 1;
  601. X      SizeWindow(window, (-1L * xx), (-1L * yy));
  602. X      MoveWindow(window, 0L, (1L * yy));
  603. X    }
  604. X  }
  605. X  else
  606. X  if (corner == 3) {
  607. X    if ((fx >= ox) && (fy >= oy)) {
  608. X      while (xx > (le+ww-MINX)) xx = xx - 1;
  609. X      while ((te+yy+wh) > s->Height) yy = yy - 1;
  610. X      SizeWindow(window, (-1L * xx), (1L * yy));
  611. X      MoveWindow(window, (1L * xx), 0L);
  612. X    }
  613. X    else
  614. X    if ((fx <= ox) && (fy <= oy)) {
  615. X      while ((le-xx) < 0) xx = xx - 1;
  616. X      while ((te+wh-yy) < MINY) yy = yy - 1;
  617. X      MoveWindow(window, (-1L * xx), 0L);
  618. X      SizeWindow(window, (1L * xx), (-1L * yy));
  619. X    }
  620. X    else
  621. X    if ((fx >= ox) && (fy <= oy)) {
  622. X      while ((te+wh-yy) < MINY) yy = yy - 1;
  623. X      while (xx > (le+ww-MINX)) xx = xx - 1;
  624. X      SizeWindow(window, (-1L * xx), (-1L * yy));
  625. X      MoveWindow(window, (1L * xx), 0L);
  626. X    }
  627. X    else
  628. X    if ((fx <= ox) && (fy >= oy)) {
  629. X      while ((le-xx) < 0) xx = xx - 1;
  630. X      while ((te+yy+wh) > s->Height) yy = yy - 1;
  631. X      MoveWindow(window, (-1L * xx), 0L);
  632. X      SizeWindow(window, (1L * xx), (1L * yy));
  633. X    }
  634. X  }
  635. X  else
  636. X  if (corner == 4) {
  637. X    if ((fx >= ox) && (fy >= oy)) {
  638. X      while ((te+yy+wh) > s->Height) yy = yy - 1;
  639. X      while ((xx+le+ww) > s->Width) xx = xx - 1;
  640. X      SizeWindow(window, (1L * xx), (1L * yy));
  641. X    }
  642. X    else
  643. X    if ((fx <= ox) && (fy <= oy)) {
  644. X      while (xx > (le+ww-MINX)) xx = xx - 1;
  645. X      while ((te+wh-yy) < MINY) yy = yy - 1;
  646. X      SizeWindow(window, (-1L * xx), (-1L * yy));
  647. X    }
  648. X    else
  649. X    if ((fx >= ox) && (fy <= oy)) {
  650. X      while ((le+ww+xx) > s->Width) xx = xx - 1;
  651. X      while ((te+wh-yy) < MINY) yy = yy - 1;
  652. X      SizeWindow(window, (1L * xx), (-1L * yy));
  653. X    }
  654. X    else
  655. X    if ((fx <= ox) && (fy >= oy)) {
  656. X      while (xx > (le+ww-MINX)) xx = xx - 1;
  657. X      while ((te+yy+wh) > s->Height) yy = yy - 1;
  658. X      SizeWindow(window, (-1L * xx), (1L * yy));
  659. X    }
  660. X  }
  661. X  Enable();
  662. X  Permit();
  663. X  nomore = corner = 0;
  664. X}
  665. X
  666. Xbreakcheck()
  667. X{
  668. X   if (SetSignal(0L,0L) & SIGBREAKF_CTRL_C)
  669. X      return (1);
  670. X   else
  671. X      return (0);
  672. X}
  673. Xbreakreset()
  674. X{
  675. X   SetSignal(0L, SIGBREAKF_CTRL_C);
  676. X}
  677. X
  678. XChk_Abort()
  679. X{
  680. X  return(0);
  681. X}
  682. X
  683. XUninstall()
  684. X{
  685. X  if (!updating)
  686. X    {
  687. X    if (inputReq)
  688. X      {
  689. X      inputReq->io_Command = IND_REMHANDLER;
  690. X      inputReq->io_Data = (APTR)&handlerStuff;
  691. X      DoIO(inputReq);
  692. X
  693. X      CloseDevice(inputReq);
  694. X      DeleteStdIO(inputReq);
  695. X      }
  696. X
  697. X    if (inputPort)    DeletePort(inputPort);
  698. X    if (signum > -1)  FreeSignal(signum);
  699. X
  700. X    if (tdevice == 0)
  701. X      {
  702. X      AbortIO(&Timer_Req.tr_node);
  703. X      CloseDevice(&Timer_Req);
  704. X      }
  705. X
  706. X    if (TimerPort)
  707. X      DeletePort(TimerPort);
  708. X
  709. X    if (defPortPtr)
  710. X      {
  711. X      if (defPortPtr->mp.mp_Node.ln_Name)
  712. X        RemPort(defPortPtr);
  713. X      FreeMem(defPortPtr,(long)sizeof(struct defPort));
  714. X      }
  715. X    }
  716. X
  717. X  if (LayersBase)
  718. X    CloseLibrary(LayersBase);
  719. X  if (GfxBase)
  720. X    CloseLibrary(GfxBase);
  721. X  if (IntuitionBase)
  722. X    CloseLibrary(IntuitionBase);
  723. X  exit(0L);
  724. X}
  725. SHAR_EOF
  726. echo "extracting MSizer.doc"
  727. sed 's/^X//' << \SHAR_EOF > MSizer.doc
  728. X============================================================================
  729. XSIZERMADSIZERMADSIZERMADSIZERMADSIZERMADSIZERMADSIZERMADSIZERMADSIZERMADSIZE
  730. X    MADSIZER                                           14th October 1989
  731. XMADSIZERMADSIZERMADSIZERMADSIZERMADSIZERMADSIZERMADSIZERMADSIZERMADSIZERMADS
  732. X============================================================================
  733. X
  734. X    JUST WHEN YOU THOUGHT IT WAS SAFE...
  735. X
  736. X       Howdy Folks, Yep.. I know it's hard to believe but I have actually
  737. X  come up with YAUP (Yet Another Useless Program). I was playing around on
  738. X  a sun machine and noticed you could resize windows from ANY corner of the
  739. X  window. HEY!! I thought to myself... <grin>
  740. X
  741. X  So here you are, simple hack, no big deal to it.
  742. X
  743. X  You can resize ANY window from ANY corner.
  744. X
  745. X  Use the CONTROL KEY and the LEFT MOUSE BUTTON,
  746. X  point at a window corner and TADAAA!!!
  747. X
  748. X  neat, huh ? <grin> thrilled me to bits...
  749. X
  750. X  To exit the program, you can send it a CONTROL-C (using "break") or
  751. X  press CONTROL-ESC-LEFTMOUSEBUTTON (in that order) simultaneously.
  752. X
  753. X  That's about it really. Jeeze. Sounded more exciting, hmmm ?
  754. X  Yeah well, that's why it's a YAUP, it's not exciting enough!!
  755. X
  756. X  This program is totally PD, as is the source code.
  757. X
  758. X  Enjoy...
  759. X
  760. X             Khaled Mardam-Bey.
  761. X
  762. X============================================================================
  763. SHAR_EOF
  764. echo "extracting MSizer.uu"
  765. sed 's/^X//' << \SHAR_EOF > MSizer.uu
  766. X
  767. Xbegin 644 MSizer
  768. XM```#\P`````````#``````````(```?T0```64````$```/I```']$[Z%:Q..
  769. XM50``,"T`"DC`+P`P+0`(2,`O`"\L@*Q.NA[\3^\`#$Y=3G5.50``,"T`"DC`"
  770. XM+P`P+0`(2,`O`"\L@*Q.NA[&3^\`#$Y=3G5.50``,"T`"DC`+P`P+0`(2,`O3
  771. XM`"\L@*Q.NA[V3^\`#$Y=3G5.50``+PQ.NA6H2.<`P&$(4(\H7TY=3G5.5?_R^
  772. XM0FR`EBMM``C__$*M__A@``%*(&W__#MH``;_]"!M__P[:``(__)";?_V(&W_H
  773. XM_`PH``8`!&<``(0@;?_\#"@``0`$9G8,;0"`__1M)#`L@"H(P``'L&W_]&86@
  774. XM0FR`)@CL``&`ESM\``'_]D)L@"I@"$)L@"I";?_V#&T`8__T9A0Y;?_T@"H[0
  775. XM?``!__8Y?``!@"9@)@QM`$7_]&8:2FR`)F<&.7P``H`F.6W_](`J.WP``?_V;
  776. XM8`1";(`F(&W__`PH``(`!&9D#&T`Z/_T9AI";(`V2FR`)F<(".P``X"78`8(#
  777. XM[``!@)=@0@QM`&C_]&8H#&P``H`F9@8([```@)=*;(`V9@X,;``!@"9F!CM\!
  778. XM``'_]CE\``&`-DIL@#9G#$IL@"9G!@CL``*`ETIM__9G'$JM__AF"B!M__PK7
  779. XM4``(8`H@;?_\(FW_^"*08`8K;?_\__@@;?_\*U#__$JM__QF`/ZR2FR`EF<4_
  780. XM(&T`#"\H``0@;0`,+Q!.NAS<4$\@+0`(3EU.=4Y5__A"ITAZ`HQ.NAQB4$\I/
  781. XM0(!(2JR`2&8(0J=.NA?Z6$]"ITAZ`H!.NAQ$4$\I0(!,2JR`3&8(0J=.NA?<:
  782. XM6$]"ITAZ`G-.NAPF4$\I0(!02JR`4&8(0J=.NA>^6$](;(!<3KH;BEA/*4"!8
  783. XM%$JL@11F(DAY``$``4AX`").NALX4$\I0($49@H_/``*3KH7BE1/8`8Y?``!A
  784. XM@&1*;(!D9P1.NA($(&R!%$(H``D@;($4$7P`!``((&R!%$AH`!1.NAN&6$]!+
  785. XM[(!<(FR!%"-(``HO+($43KH:(%A/2'C__TZZ&B)83RE`@%BPO/____]F!$ZZ]
  786. XM$;1P`2(L@%CCH"E`@/I"ITZZ&O983RE`@/9"9TAL@`).NAD07$\I0(`X9@1.=
  787. XMNA&&+RR`.$ZZ&>983RE`@#QF!$ZZ$7)![(#V*4B!#$'Z_2`I2($0&7P`-X$'[
  788. XM0?H!>"E(@0A"IR\L@#Q"ITAZ`7%.NAKV3^\`$$J`9P1.NA$X(&R`/#%\``D`U
  789. XM'$'L@/XB;(`\(T@`*"\L@#Q.NAI$6$]"ITAZ`4A.NAB,4$\I0(!`9@1.NA$"U
  790. XM0J=(;("T2'@``4AZ`3-.NAJB3^\`$"E`@%1G!$ZZ$.(I;(!`@,(Y?``)@-!"C
  791. XM+(#20BR`TR!L@$!P`!`H``]R`>&A*4&`W$ZZ`3Q(>``40J=.NAH"6$\O`$ZZ!
  792. XM&L!03R`L@/J`K(#<+P!.NAK06$\O+(!`3KH:'%A/*T#__&<*2JW__&<$3KH`+
  793. XM_DZZ$#I*0&<$3KH0;DZZ$$P(+```@)=G!$ZZ$%X(+``!@)=G#$ZZ`)Y";(`D2
  794. XM0FR`(`@L``.`EV<$3KH(``@L``*`EV<62FR`(&8&3KH%9&`*2FR`)&<$3KH`+
  795. XMPD)L@)9@`/]V3EU.=6EN='5I=&EO;BYL:6)R87)Y`&=R87!H:6-S+FQI8G)A8
  796. XM<GD`;&%Y97)S+FQI8G)A<GD`4&]/<$AA3GD`:6YP=70N9&5V:6-E`%1I;5!O#
  797. XM9&QE`'1I;65R+F1E=FEC90!.50``2FR`*&<J,"R`AM!L@'HY0("`,"R`B-!LW
  798. XM@'PY0(""3KH`K"\L@+!.NAJ66$]";(`H3EU.=4Y5``!"K(#4*7P`#T)`@-A(4
  799. XM;("T3KH98EA/3EU.=4Y5```@;("D,"@`$K!L@(9F#B!L@*0P*``0L&R`B&<\J
  800. XM,"R`AM!L@'HY0("`,"R`B-!L@'PY0(""84`@;("D,"@`$M!L@'HY0("`(&R`>
  801. XMI#`H`!#0;(!\.4"`@F$>.7P``8`H(&R`I#EH`!*`AB!L@*0Y:``0@(A.74YU<
  802. XM3E4```QL``&`)&8$82Y@*`QL``*`)&8&3KH!(&`:#&P``X`D9@9.N@(48`P,/
  803. XM;``$@"1F!$ZZ`PA.74YU3E4``$IL@(!L!E)L@(!@]$IL@()L!E)L@()@]#`LV
  804. XM@)[0;("8(&R`I+!H``QO!E-L@)A@Z#`L@)S0;(":(&R`I+!H``YO!E-L@)I@L
  805. XMZ#`L@)[0;("8D'P`*#(L@("R0&\0,"R`GM!L@)B0?``H.4"`@#`L@)S0;(":"
  806. XMD'P`&#(L@(*R0&\0,"R`G-!L@)J0?``8.4"`@C\L@((_+("`3KKY6%A//RR`E
  807. XM@C`L@)[0;("84T`_`$ZZ^6983S`L@)S0;(":4T`_`#`L@)[0;("84T`_`$ZZX
  808. XM^4A83S`L@)S0;(":4T`_`#\L@(!.NODR6$\_+(""/RR`@$ZZ^2183TY=3G5.M
  809. XM50``(&R`I#`L@("P:``,;P93;("`8.Q*;("`;`92;("`8/1*;("";`92;(""I
  810. XM8/0@;("D,"R`@K!H``YO!E-L@()@[#`L@)S0;(":(&R`I+!H``YO!E-L@)I@<
  811. XMZ#`L@)[0?``H,BR`@+)`;`PP+(">T'P`*#E`@(`P+("<T&R`FI!\`!@R+(""7
  812. XMLD!O$#`L@)S0;(":D'P`&#E`@((_+("","R`@%-`/P!.NOA.6$\_+(""/RR`&
  813. XMGDZZ^&183S`L@)S0;(":4T`_`#\L@)Y.NOA.6$\P+("<T&R`FE-`/P`P+("`#
  814. XM4T`_`$ZZ^#183S\L@((P+("`4T`_`$ZZ^")83TY=3G5.50``2FR`@&P&4FR`(
  815. XM@&#T(&R`I#`L@("P:``,;P93;("`8.Q*;("";`92;(""8/0@;("D,"R`@K!HH
  816. XM``YO!E-L@()@[#`L@)[0;("8(&R`I+!H``QO!E-L@)A@Z#`L@)[0;("8D'P`@
  817. XM*#(L@("R0&\0,"R`GM!L@)B0?``H.4"`@#`L@)S0?``8,BR`@K)`;`PP+("<0
  818. XMT'P`&#E`@((P+(""4T`_`#\L@(!.NO=,6$\P+(""4T`_`#`L@)[0;("84T`_\
  819. XM`$ZZ]U983S\L@)PP+(">T&R`F%-`/P!.NO=`6$\_+("</RR`@$ZZ]S)83S`LO
  820. XM@()30#\`/RR`@$ZZ]R!83TY=3G5.50``2FR`@&P&4FR`@&#T(&R`I#`L@("P,
  821. XM:``,;P93;("`8.Q*;("";`92;(""8/0@;("D,"R`@K!H``YO!E-L@()@[#`L$
  822. XM@)[0?``H,BR`@+)`;`PP+(">T'P`*#E`@(`P+("<T'P`&#(L@(*R0&P,,"R`#
  823. XMG-!\`!@Y0("","R`@E-`/P`P+("`4T`_`$ZZ]F983S\L@)PP+("`4T`_`$ZZA
  824. XM]GA83S\L@)P_+(">3KKV:EA/,"R`@E-`/P`_+(">3KKV6%A/,"R`@E-`/P`P*
  825. XM+("`4T`_`$ZZ]D)83TY=3G5.50``(&R`2"EH`#2`J$JL@*AG``)R(&R`J#EH%
  826. XM``2`GB!L@*@Y:``&@)P@;("H.6@`"("8(&R`J#EH``J`FB!L@*@I:``N@*0@^
  827. XM;("D.6@`#("@(&R`I#EH``Z`HB!L@*31_````%0I2("L2'@``2\L@*Q.NA3*Z
  828. XM4$](>``"+RR`K$ZZ%,Q03TAX``(O+("L3KH4SE!/(&R`I#EH`!*`BCEH`!*`A
  829. XMCCEH`!*`AB!L@*0Y:``0@(PY:``0@)`Y:``0@(A";(`D,"R`C+!L@)QM``"6C
  830. XM,"R`G%!`,BR`C+)`;```AC`L@(JP;(">;3`P+(">T'P`$#(L@(JR0&P@.7P`$
  831. XM`8`D,"R`GI!L@(HY0(!Z,"R`G)!L@(PY0(!\8$8P+(">T&R`F#(L@(JR0&XV_
  832. XM,"R`GM!L@)B0?``0,BR`BK)`;R(Y?``"@"0P+(">T&R`F)!L@(HY0(!Z,"R`3
  833. XMG)!L@(PY0(!\8```L#`L@)S0;(":,BR`C+)`;@``GC`L@)S0;(":44`R+(",H
  834. XMLD!O``"*,"R`BK!L@)YM-#`L@)[0?``0,BR`BK)`;"0Y?``#@"0P+(">D&R`^
  835. XMBCE`@'HP+("<T&R`FI!L@(PY0(!\8$HP+(">T&R`F#(L@(JR0&XZ,"R`GM!LX
  836. XM@)B0?``0,BR`BK)`;R8Y?``$@"0P+(">T&R`F)!L@(HY0(!Z,"R`G-!L@)J0E
  837. XM;(",.4"`?$IL@"1G:B!L@*0Y:``2@(HY:``2@(8@;("D.6@`$(",.6@`$("(D
  838. XM(&R`I-'\````X"E(@+`O+("P3KH3?EA/,"R`AM!L@'HY0("`.4"`CC`L@(C05
  839. XM;(!\.4"`@CE`@)!.NOER.7P``8`@.7P``8`H8`1";(`@3EU.=4Y5``!.NA&<+
  840. XM3KH15DZZ^'PY;("`@)(Y;(""@)0P+("2D&R`CCE`@(!*;("`;`1$;("`,"R``
  841. XME)!L@)`Y0(""2FR`@FP$1&R`@@QL``&`)&8``B8P+("2L&R`CFU^,"R`E+!LO
  842. XM@)!M=#`L@)[0;("8D'P`*#(L@("R0&\&4VR`@&#F,"R`G-!L@)J0?``8,BR`-
  843. XM@K)`;P93;(""8.8P+(""2,!$@"\`,"R`@$C`1(`O`"\L@*A.NA)Z3^\`##`L=
  844. XM@()(P"\`,"R`@$C`+P`O+("H3KH23$_O``Q@``&:,"R`DK!L@(YN;C`L@)2P.
  845. XM;("0;F0P+(">D&R`@$I`;`93;("`8.XP+("<D&R`@DI`;`93;(""8.XP+(""L
  846. XM2,!$@"\`,"R`@$C`1(`O`"\L@*A.NA'P3^\`##`L@()(P"\`,"R`@$C`+P`O_
  847. XM+("H3KH1YD_O``Q@``$B,"R`DK!L@(YM``"(,"R`E+!L@)!N?#`L@)[0;("8!
  848. XMD'P`*#(L@("R0&\&4VR`@&#F,"R`G)!L@()*0&P&4VR`@F#N0J<P+("`2,!$0
  849. XM@"\`+RR`J$ZZ$8A/[P`,,"R`@DC`1(`O`#`L@(!(P"\`+RR`J$ZZ$5A/[P`,'
  850. XM,"R`@DC`+P!"IR\L@*A.NA%43^\`#&```)`P+("2L&R`CFX``(0P+("4L&R`^
  851. XMD&UX,"R`G-!L@)J0?``8,BR`@K)`;P93;(""8.8P+(">D&R`@$I`;`93;("`F
  852. XM8.XP+(""2,!$@"\`0J<O+("H3KH0]D_O``PP+(""2,`O`#`L@(!(P$2`+P`O&
  853. XM+("H3KH0QD_O``Q"IS`L@(!(P"\`+RR`J$ZZ$,)/[P`,8``%>@QL``*`)&8`"
  854. XM`<0P+("2L&R`CFUX,"R`E+!L@)!M;C`L@)S0;(":D'P`&#(L@(*R0&\&4VR`Q
  855. XM@F#F,"R`@-!L@)[0;("8(&R`I+!H``QO!E-L@(!@Y#`L@()(P$2`+P`P+("`3
  856. XM2,`O`"\L@*A.NA!,3^\`##`L@()(P"\`0J<O+("H3KH0)$_O``Q@``$^,"R`J
  857. XMDK!L@(YN5C`L@)2P;("0;DPP+("<D&R`@DI`;`93;(""8.XP+(""2,!$@"\`P
  858. XM0J<O+("H3KH/XD_O``PP+(""2,`O`#`L@(!(P$2`+P`O+("H3KH/UD_O``Q@U
  859. XM``#>,"R`DK!L@(YM;C`L@)2P;("0;F0P+(">T&R`F-!L@(`@;("DL&@`#&\&2
  860. XM4VR`@&#D,"R`G)!L@()*0&P&4VR`@F#N,"R`@DC`1(`O`$*G+RR`J$ZZ#V9/5
  861. XM[P`,,"R`@DC`+P`P+("`2,`O`"\L@*A.N@]<3^\`#&!D,"R`DK!L@(YN6C`LC
  862. XM@)2P;("0;5`P+("<T&R`FI!\`!@R+(""LD!O!E-L@()@YC`L@()(P$2`+P`P&
  863. XM+("`2,!$@"\`+RR`J$ZZ#PQ/[P`,,"R`@DC`+P!"IR\L@*A.N@[D3^\`#&``\
  864. XM`ZX,;``#@"1F``'T,"R`DK!L@(YM>#`L@)2P;("0;6XP+(">T&R`F)!\`"@R3
  865. XM+("`LD!O!E-L@(!@YC`L@)S0;(""T&R`FB!L@*2P:``.;P93;(""8.0P+(""2
  866. XM2,`O`#`L@(!(P$2`+P`O+("H3KH.@$_O``Q"IS`L@(!(P"\`+RR`J$ZZ#EA/M
  867. XM[P`,8``!;C`L@)*P;(".;FXP+("4L&R`D&YD,"R`GI!L@(!*0&P&4VR`@&#NK
  868. XM,"R`G-!L@)J0;(""L'P`&&P&4VR`@F#H0J<P+("`2,!$@"\`+RR`J$ZZ#?Y/P
  869. XM[P`,,"R`@DC`1(`O`#`L@(!(P"\`+RR`J$ZZ#?)/[P`,8```]C`L@)*P;(".I
  870. XM;70P+("4L&R`D&YJ,"R`G-!L@)J0;(""L'P`&&P&4VR`@F#H,"R`GM!L@)B0^
  871. XM?``H,BR`@+)`;P93;("`8.8P+(""2,!$@"\`,"R`@$C`1(`O`"\L@*A.N@V(^
  872. XM3^\`#$*G,"R`@$C`+P`O+("H3KH-8$_O``Q@=C`L@)*P;(".;FPP+("4L&R`<
  873. XMD&UB,"R`GI!L@(!*0&P&4VR`@&#N,"R`G-!L@(+0;(":(&R`I+!H``YO!E-LT
  874. XM@()@Y$*G,"R`@$C`1(`O`"\L@*A.N@T$3^\`##`L@()(P"\`,"R`@$C`+P`O#
  875. XM+("H3KH,^D_O``Q@``&R#&P`!(`D9@`!J#`L@)*P;(".;6(P+("4L&R`D&U8V
  876. XM,"R`G-!L@(+0;(":(&R`I+!H``YO!E-L@()@Y#`L@(#0;(">T&R`F"!L@*2P&
  877. XM:``,;P93;("`8.0P+(""2,`O`#`L@(!(P"\`+RR`J$ZZ#(1/[P`,8``!/#`LR
  878. XM@)*P;(".;F`P+("4L&R`D&Y6,"R`GM!L@)B0?``H,BR`@+)`;P93;("`8.8PF
  879. XM+("<T&R`FI!L@(*P?``8;`93;(""8.@P+(""2,!$@"\`,"R`@$C`1(`O`"\LF
  880. XM@*A.N@P:3^\`#&```-(P+("2L&R`CFU>,"R`E+!L@)!N5#`L@)[0;("8T&R`=
  881. XM@"!L@*2P:``,;P93;("`8.0P+("<T&R`FI!L@(*P?``8;`93;(""8.@P+(""U
  882. XM2,!$@"\`,"R`@$C`+P`O+("H3KH+L$_O``Q@:#`L@)*P;(".;EXP+("4L&R`6
  883. XMD&U4,"R`GM!L@)B0?``H,BR`@+)`;P93;("`8.8P+("<T&R`@M!L@)H@;("D9
  884. XML&@`#F\&4VR`@F#D,"R`@DC`+P`P+("`2,!$@"\`+RR`J$ZZ"T9/[P`,3KH)#
  885. XMCDZZ"B9";(`D0FR`($Y=3G5.50``0J="ITZZ"CI03P@```QG!G`!3EU.=7``$
  886. XM8/A.50``2'@0`$*G3KH*&E!/3EU.=4Y5``!P`$Y=3G5.50``2FR`9&8``+)*-
  887. XMK(`\9S0@;(`\,7P`"@`<0>R`_B)L@#PC2``H+RR`/$ZZ"/Q83R\L@#Q.N@<J`
  888. XM6$\O+(`\3KH(/%A/2JR`.&<*+RR`.$ZZ![A83PRL_____X!8;PHO+(!83KH):
  889. XM'EA/2JR`5&842&R`M$ZZ!LA83TAL@+1.N@;B6$]*K(!`9PHO+(!`3KH'>EA/?
  890. XM2JR!%&<B(&R!%$JH``IG"B\L@11.N@DZ6$](>``B+RR!%$ZZ"+A03TJL@$AGB
  891. XM"B\L@$A.N@:F6$]*K(!,9PHO+(!,3KH&EEA/2JR`4&<*+RR`4$ZZ!H983T*GS
  892. XM3KH$@EA/3EU.=6%P0^R`<D7L@'*UR68.,CP`/&L(=``BPE')__PI3X$8+'@`I
  893. XM!"E.@1Q(YX"`""X`!`$I9Q!+^@`(3J[_XF`&0J?S7TYS0_H`($ZN_F@I0($@W
  894. XM9@PN/``#@`=.KO^48`1.N@`:4$].=61O<RYL:6)R87)Y`$GY``!__DYU3E4`K
  895. XM`"\*2'D``0``,"R`9L'\``8O`$ZZ!XHI0($D4$]F%$*G2'D``0``3KH%K%!/R
  896. XM+FR!&$YU(&R!)$)H``0@;($D,7P``0`0(&R!)#%\``$`"B!L@1@@+($8D*@`O
  897. XM!%"`*4"!*"!L@2@@O$U!3EA"ITZZ!W0D0$JJ`*Q83V<N+RT`#"\M``@O"DZZD
  898. XM`*XY?``!@2P@;($D`&B````$(&R!)`!H@```"D_O``Q@0DAJ`%Q.N@@B2&H`O
  899. XM7$ZZ!V@I0($N(&R!+DJH`"103V<0(&R!+B)H`"0O$4ZZ!+I83R\L@2XO"DZZS
  900. XM`F@I;($N@3)03TZZ!*X@;($D((!.N@2Z(&R!)"%```9G%DAX`^U(>@`J3KH$.
  901. XMEB!L@20A0``,4$\O+($R/RR!-DZZZL)"9TZZ`M103R1?3EU.=2H`3E4``$CG*
  902. XM##`D;0`0(&T`"$JH`*QG&"!M``@@*`"LY8`H`"!$("@`$.6`)D!@!"9L@&@0:
  903. XM$TB`2,#0K0`,5(`Y0($X0J<P+($X2,`O`$ZZ!API0($Z4$]F"$S?##!.74YU7
  904. XM$!-(@#H`/P4@2U*(+P@O+($Z3KH!?C`%2,`@0-'L@3I#^@%$$-EF_#\M``XO-
  905. XM"B\L@3I.N@$Z(&R!.D(P4``Y?``!@38P!4C`T*R!.B9`4HLD2T_O`!00$TB`\
  906. XM.@"P?``@9QBZ?``)9Q*Z?``,9PRZ?``-9P:Z?``*9@12BV#8#!,`(&UZ#!,`F
  907. XM(F8N4HL@2U*+$!!(@#H`9QX@2E**$(6Z?``B9A`,$P`B9@12BV`&0BK__V`"E
  908. XM8-9@."!+4HL0$$B`.@!G)KI\`"!G(+I\``EG&KI\``QG%+I\``UG#KI\``IG^
  909. XM""!*4HH0A6#.($I2BD(02D5F`E.+4FR!-F``_UI"$D*G,"R!-E)`2,#E@"\`J
  910. XM3KH$^BE`@3)03V8(0FR!-F``_MAZ`"9L@3I@)#`%2,#E@"!L@3(ABP@`($L@U
  911. XM"$H89OR1P%.(,`A20$C`U\!21;IL@39MUC`%2,#E@"!L@3)"L`@`8`#^E"``%
  912. XM,#Q__V`$,"\`#"!O``1*&&;\4T@B;P`(4T`0V5?(__QG`D(0("\`!$YU3.\#I
  913. XM```$(`@R+P`,8`(0V5?)__QG!E)!8`)"&%')__Q.=4Y5``!(YPXP)&T`"$*GE
  914. XM2'H`CDZZ!/HI0($^4$]F"$S?#'!.74YU(&T`#")H`"0O*0`$3KH%X"@`6$]GF
  915. XM4DAZ`&T@1"\H`#9.N@6R)D!*@%!/9S1(>`/M+PM.N@(`+`!03V<D(`;E@"H`:
  916. XM($4E:``(`*0E1@"<2'@#[4AZ`#A.N@'<)4``H%!/+P1.N@5^6$\O+($^3KH"A
  917. XM'$*L@3Y83V"`:6-O;BYL:6)R87)Y`%=)3D1/5P`J`$Y5``!*K(%"9P8@;(%"V
  918. XM3I`_+0`(3KH`"%1/3EU.=4Y5__PO!#`M``A(P"M`__Q*K($D9RAX`&`*/P1.T
  919. XMN@#^5$]21+AL@&9M\#`L@&;!_``&+P`O+($D3KH#JE!/2JR!1F<&(&R!1DZ0[
  920. XM2JR`;&<*+RR`;$ZZ`4A83TJL@4IG""!L@4H@K(%.2JR!4F<*+RR!4DZZ`6Y8K
  921. XM3TJL@59G"B\L@59.N@%>6$]*K(%:9PHO+(%:3KH!3EA/2JR!7F<*+RR!7DZZ+
  922. XM`3Y83RQX``0(+@`$`2EG%"\-2_H`"DZN_^(J7V`&0J?S7TYS2JR!+F8P2JR!R
  923. XM.F<H,"R!.$C`+P`O+($Z3KH#`C`L@3920$C`Y8`O`"\L@3).N@+N3^\`$&`.[
  924. XM3KH"V"\L@2Y.N@-86$\@+?_\+FR!&$YU*!].74YU3E4``$CG#B`X+0`(,`3!+
  925. XM_``&)$#5[($D2D1M"KAL@&9L!$J29A`Y?``"@6)P_TS?!'!.74YU""H`!P`$P
  926. XM9@@O$DZZ``I83T*2<`!@XB(O``0L;($@3N[_W"(O``0L;($@3N[_@BQL@2!.E
  927. XM[O_*3.\`!@`$+&R!($[N_^(L;($@3N[_Q$[Z``(B+P`$+&R!($[N_Z8B;P`$8
  928. XM+&R!'$[N_B!(YP$$3.\@@``,+&R!'$ZN_Y1,WR"`3G4B;P`$+&R!'$[N_CY.,
  929. XM^@`"(F\`!"QL@1Q.[OYB3E4``$CG""!(>/__3KH`T"@`L+S_____6$]F"G``)
  930. XM3-\$$$Y=3G5(>0`!``%(>``B3KH!8"1`2H!03V8,+P1.N@'&<`!83V#6)6T`;
  931. XM"``*%6T`#P`)%7P`!``(0BH`#A5$``]"ITZZ`7`E0``02JT`"%A/9PHO"DZZ:
  932. XM`%I83V`*2&H`%$ZZ`9Y83R`*8)).50``+PHD;0`(2JH`"F<(+PI.N@'&6$\5!
  933. XM?`#_``@E?/____\`%'``$"H`#R\`3KH!2DAX`"(O"DZZ`2Q/[P`,)%].74YUZ
  934. XM(F\`!"QL@1Q.[OZ>("\`!"QL@1Q.[OZV3E4``$AX`#`O+0`(3KH`&E!/3EU.+
  935. XM=4Y5```O+0`(3KH`3%A/3EU.=4Y5```O"DJM``AF"'``)%].74YU2'D``0`!2
  936. XM+RT`#$ZZ`&`D0$J`4$]F!'``8.`5?``%``@U;0`.`!(E;0`(``X@"F#*3E4`V
  937. XM`"\*)&T`""`*9@8D7TY=3G45?`#_``@E?/____\`%"5\_____P`8<``P*@`2S
  938. XM+P`O"DZZ`&903V#23OH``DSO``,`!"QL@1Q.[O\Z+&R!'$[N_XA(YP,`(F\`8
  939. XM#"QL@1Q.KOXX3-\`P$YU+&R!'$[N_X(B;P`$+&R!'$[N_GI.^@`"(F\`!"QL(
  940. XM@1Q.[O[:3OH``BQL@1Q.[O]\3OH``B)O``0@+P`(+&R!'$[N_RX@+P`$+&R!G
  941. XM'$[N_K!.^@`"(&\`!"QL@1Q.[OZ,(&\`!""(6)!"J``$(4@`"$YU(&\`!$SOQ
  942. XM`@$`""(O`!`L;($<3N[^1$[Z``(L;($<(F\`!"`O``A.[OW8+&R!'$[N_W8BC
  943. XM;P`$+&R!'$[N_I@B;P`$+&R!'$[N_H8B;P`$+&R!'$[N_C).^@`"3.\``P`$&
  944. XM+&R!'$[N_LXB;P`$("\`""QL@1Q.[O[4(F\`!"`O``@L;($<3N[^O"`O``0L"
  945. XM;($<3N[^PB!O``0L;($<3N[^@")O``1,[P`#``@L;(!,3N[_"B)O``1,[P`#>
  946. XM``@L;(!,3N[_$")O``0@+P`(+&R`3$[N_JHB;P`$("\`""QL@$Q.[OZD(F\`J
  947. XM!"`O``@L;(!,3N[^GB)O``1,[P`#``@L;(!,3N[^O$SO`P``!"QL@3Y.[O^@`
  948. XM(&\`!"QL@3Y.[O^F(&\`!"QL@3Y.[O^R(&\`!$SO``,`""QL@$A.[O]8(&\`]
  949. XM!$SO``,`""QL@$A.[O[@(&\`!"QL@%!.[O^4(&\`!"QL@%!.[O^.```#[```!
  950. XM``$````!```6(@````````/R```#Z@```!Q095!E5&4`2VAA;&5D($UA<F1AI
  951. XM;2U"97D@,3DX.0``````````````````````````````````````````````U
  952. XM`````````````````````````````?____]7:4YN67!/`````!0`````````E
  953. X3```````#\@```^L````!```#\@``9
  954. X``
  955. Xend
  956. Xsize 8344
  957. SHAR_EOF
  958. echo "End of archive 1 (of 1)"
  959. # if you want to concatenate archives, remove anything after this line
  960. exit
  961.